/**
 * TypeScript 泛型
 * 泛型是指在定义函数、接口或类的时候
 * 不预先指定具体类型，而在使用的时候再指定类型的一种特性
 */

// 没有确切定义返回值类型，运行的数组每一项都可以是任意类型
 function createArray(length:number, value:any):Array<any> {
  let arr = []
  for(let i=0; i<length; i++) {
    arr[i] = value
  }
  return arr
}
createArray(3, 1)


// 使用泛型
function createArray2<T>(length:number, value:T):Array<T>{
  let arr = []
  for(let i=0; i<length; i++) {
    arr[i] = value
  }
  return arr
}
let strArr: string[] = createArray2<string>(3, '1')
let numArr: number[] = createArray2(3, 1)
let numArr2: number[] = createArray2<number>(3, 1)

// 接口当中采用泛型
interface Icreate {
  <T>(name: string, value: T): Array<T>
}
let func: Icreate
func = function<T>(name:string, value:T):Array<T>{
  return []
}
var strArr2:number [] = func("张三", 3)

export {}